﻿#define _CRT_SECURE_NO_WARNINGS 1

class Solution {
public:
    void reverse(string& s, int pos1, int pos2)
    {
        while (pos1 < pos2)
        {
            char tmp = s[pos1];
            s[pos1] = s[pos2];
            s[pos2] = tmp;
            pos1++;
            pos2--;
        }
    }
    string reverseStr(string s, int k)
    {
        int pos1 = 0, pos2 = 0;
        while (pos2 < s.size())
        {
            if (pos2 - pos1 + 1 == 2 * k)
            {
                reverse(s, pos1, pos1 + k - 1);
                pos1 = pos2 + 1;
            }
            pos2++;
        }
        pos2--;//最后退出时，pos2加多了1
        if (pos2 - pos1 + 1 < k)
        {
            reverse(s, pos1, pos2);
        }
        if (pos2 - pos1 + 1 >= k && pos2 - pos1 + 1 < 2 * k)
        {
            reverse(s, pos1, pos1 + k - 1);
        }
        return s;
    }
};

//进阶玩法
class Solution {
public:
    string reverseStr(string s, int k)
    {
        int n = s.length();
        for (int i = 0; i < n; i += 2 * k)
        {
            reverse(s.begin() + i, s.begin() + min(i + k, n));//该函数反转不会反转到右参数
        }
        return s;
    }
};


